#ifndef MYCAMERA_H_HEADER_GUARD
#define MYCAMERA_H_HEADER_GUARD

#include "entry/entry.h"

 // bit map
#define CAMERA_KEY_FORWARD   UINT8_C(0x01)
#define CAMERA_KEY_BACKWARD  UINT8_C(0x02)
#define CAMERA_KEY_LEFT      UINT8_C(0x04)
#define CAMERA_KEY_RIGHT     UINT8_C(0x08)
#define CAMERA_KEY_UP        UINT8_C(0x10)
#define CAMERA_KEY_DOWN      UINT8_C(0x20)

void myCameraCreate();

void myCameraDestroy();

void myCameraSetPosition(const bx::Vec3& _pos);

void myCameraSetHorizontalAngle(float _horizontalAngle);

void myCameraSetVerticalAngle(float _verticalAngle);

void myCameraSetKeyState(uint8_t _key, bool _down);

void myCameraGetViewMtx(float* _viewMtx);

void myCameraReset();

bx::Vec3 myCameraGetPosition();

bx::Vec3 myCameraGetAt();

void myCameraUpdate(float _deltaTime, const entry::MouseState& _mouseState, bool _reset = false);

float myCameraFOV();

#endif 
